// Package _7_二叉树的镜像 main
// @Title _7_二叉树的镜像
// @Description  请完成一个函数，输入一个二叉树，该函数输出它的镜像。
// @Author  == 琳琳也叫王木木 ==  2022-01-12 18:54
// @Create  2022-01-12 18:54
package main

import "fmt"

// TreeNode Definition for a binary 树 node.
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func main() {
	root := TreeNode{
		4,
		&TreeNode{
			2,
			&TreeNode{
				1,
				nil, nil,
			}, &TreeNode{
				3, nil, nil,
			},
		}, &TreeNode{
			7,
			&TreeNode{
				6,
				nil, nil,
			}, &TreeNode{
				9,
				nil, nil,
			},
		},
	}

	display(mirrorTree(&root))
	//display(&root)
}

func display(root *TreeNode) {
	if root == nil {
		return
	}
	display(root.Left)
	fmt.Println(root.Val)
	display(root.Right)
}

func mirrorTree(root *TreeNode) *TreeNode {
	if root == nil {
		return nil
	}
	left := mirrorTree(root.Left)   // 从最底层的左子树开始翻转
	right := mirrorTree(root.Right) // 从最底层的右子树开始翻转
	root.Left = right
	root.Right = left
	return root
}
